home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / util / text / proged1.lha / InstallProgED / SASC_support / Sources / ProjectRun.c < prev   
C/C++ Source or Header  |  1995-09-25  |  2KB  |  121 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <math.h>
  6. #include <proto/exec.h>
  7. #include <proto/dos.h>
  8. #include <workbench/startup.h>
  9. #include <dos/dostags.h>
  10.  
  11. int main(int argc,char *argv[])
  12. {
  13.     struct WBStartup    s;
  14.     char             buffer[300],
  15.                 *p;
  16.     FILE            *file;
  17.     short             trovato,
  18.                  wb;
  19.     struct WBArg         arg[1];
  20.     struct MsgPort        *Port,
  21.                 *MyPort;
  22.     BPTR             Code,
  23.                  fileinout;
  24.     int             stack;
  25.  
  26.  
  27.  
  28.     if (!stricmp(argv[1],"CLI"))    wb=FALSE;
  29.     else if (!strcmp(argv[1],"WB"))    wb=TRUE;
  30.     else exit(5);
  31.  
  32.     stack=atoi(argv[2]);
  33.     stack=max(4000,stack);
  34.  
  35.     if (!(file=fopen("SCOPTIONS","r")))    exit(5);
  36.  
  37.     trovato=FALSE;
  38.     while((!feof(file))&&(!trovato))
  39.     {
  40.         fgets(buffer,sizeof(buffer)-1,file);
  41.         if (!strncmp(buffer,"PROGRAMNAME=",12))    trovato=TRUE;
  42.     }
  43.  
  44.     fclose(file);
  45.  
  46.     if (!trovato)    exit(5);
  47.  
  48.     strcpy(buffer,buffer+12);
  49.  
  50.     if (buffer[0])    buffer[strlen(buffer)-1]='\0';
  51.  
  52.     if (!wb)
  53.     {
  54.         /***** Esegui il comando *****/
  55.         strcat(buffer," ");
  56.  
  57.         if (file=fopen("PrjArguments","r"))
  58.         {
  59.             fgets(buffer+strlen(buffer),sizeof(buffer)-1,file);
  60.             fclose(file);
  61.         }
  62.  
  63.         p=argv[3];
  64.         if (!p)    p="CON://///AUTO/WAIT/CLOSE";
  65.  
  66.         if (!(fileinout=Open(p,MODE_NEWFILE)))
  67.             exit(5);
  68.  
  69.         SystemTags(buffer,
  70.             SYS_Input,    fileinout,
  71.             SYS_Output,    NULL,
  72.             SYS_Asynch,    TRUE,
  73.             NP_StackSize,    stack,
  74.         TAG_END);
  75.     }
  76.     else
  77.     {
  78.         arg[0].wa_Name=buffer;
  79.  
  80.         if (!(MyPort=CreateMsgPort()))    exit(5);
  81.  
  82.         if (!(Code=LoadSeg((UBYTE*)buffer)))
  83.         {
  84.             DeleteMsgPort(MyPort);
  85.             exit(5);
  86.         }
  87.  
  88.         if (!(arg[0].wa_Lock=Lock((UBYTE*)"",ACCESS_READ)))
  89.         {
  90.             UnLoadSeg(Code);
  91.             DeleteMsgPort(MyPort);
  92.             exit(5);
  93.         }
  94.  
  95.         if (!(Port=CreateProc((UBYTE*)buffer,0,Code,stack)))
  96.  
  97.         s.sm_Message.mn_Node.ln_Succ=NULL;
  98.         s.sm_Message.mn_Node.ln_Pred=NULL;
  99.         s.sm_Message.mn_Node.ln_Type=NT_MESSAGE;
  100.         s.sm_Message.mn_Node.ln_Pri=0;
  101.         s.sm_Message.mn_Node.ln_Name=NULL;
  102.         s.sm_Message.mn_ReplyPort=MyPort;
  103.         s.sm_Message.mn_Length=sizeof(struct WBStartup);
  104.         s.sm_Process=Port;
  105.         s.sm_Segment=Code;
  106.         s.sm_NumArgs=1;
  107.         s.sm_ToolWindow=NULL;
  108.         s.sm_ArgList=arg;
  109.  
  110.         PutMsg(Port,(struct Message *)&s);
  111.         WaitPort(MyPort);
  112.         while(GetMsg(MyPort));
  113.  
  114.         UnLoadSeg(Code);
  115.         DeleteMsgPort(MyPort);
  116.         UnLock(arg[0].wa_Lock);
  117.     }
  118.  
  119.     exit(0);
  120. }
  121.